home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 076-100 / disk_092 / as6502 / bootsa.asm < prev    next >
Assembly Source File  |  1992-05-06  |  3KB  |  130 lines

  1.  .PAGE "VIC Object code boot from USER port"
  2. ;   BOOT : VIC PROGRAM TO RECEIVE AIM FORMAT OBJECT
  3. ;          CODE FLIES THROUGH THE VIC USER PORT.
  4.  
  5. ;   VIC 6522 VIA PORT ADDRESSES
  6.  
  7. ORB1 =$9110 ;I/O REGISTER B
  8. DDRB1 =$9112 ;DATA DIRECTION REGISTER B
  9. PCR1 =$911C ;PERIPHERAL CONTROL REGISTER 1
  10. IFR1 =$911D ;INTERRUPT FLAG REGISTER
  11. IER1 =$911E ;INTERRUPT ENABLE REGISTER
  12.  
  13. ;   VIC subroutines
  14.  
  15. STOP =$FFE1 ;check for stop key down
  16.  
  17. ;   ZERO PAGE STORAGE
  18.  
  19. VICKEY =$C5 ;current key down
  20. KISTAK =$C6 ;keyboard input stack
  21. staksav =$fb ;stack save for RCHEK sub
  22. BYTMP =$FD ;INPUT BYTE TEMPORARY
  23. PTRLO =$FE ;LOAD POINTER
  24. PTRHI =$FF
  25.  
  26. CTLZ =$1a ;end of file charcter
  27.  
  28.  *=$33C ;locate in the tape buffer
  29.  
  30. BOOT CLD
  31.  tsx ;save stack for STOP exit
  32.  stx staksav
  33.  JSR INITIO ;INIT USER PORT
  34. RECLUP JSR GETCHR ;SCAN FOR A ';'
  35.  cmp #CTLZ ;end of file char?
  36.  beq bootex ;yes end
  37.  CMP #$3b
  38.  BNE RECLUP
  39.  JSR GETBYT ;GET RECORD LENGTH
  40.  TAX ;ZERO?
  41.  BEQ EOT ;YES, WE'RE DUN
  42.  JSR GETBYT ;GET HI ORDER LOAD ADDRESS
  43.  STA PTRHI ;SAVE
  44.  JSR GETBYT ;GET LO ORDER
  45.  STA PTRLO ;SAVE
  46.  LDY #$0 ;CLEAR INDEX
  47. BYTLUP JSR GETBYT ;GET AN OBJECT BYTE
  48.  STA (PTRLO),Y ;SAVE IT
  49.  INY ;BUMP INDEX
  50.  DEX ;COUNT BYTE
  51.  BNE BYTLUP ;LOOP 'TILL ZERO
  52.  BEQ RECLUP ;THEN GET NEXT RECORD
  53.  
  54. EOT  ;look for control z to end
  55. ENDLUP JSR GETCHR ;TO END THE RECORD
  56.  cmp #CTLZ
  57.  BNE ENDLUP
  58. bootex clc
  59.  RTS
  60.  
  61. ;   GETBYT : INPUT TWO ASCII HEX DIGITS AND
  62. ;             PACK INTO ONE BYTE.
  63.  
  64. GETBYT JSR GETCHR ;INPUT BYTE
  65.  JSR PACK ;PACK INTO 1 NYBBLE
  66.  JSR GETCHR ;GET 2ND HALF
  67.  JSR PACK ;PACK IT
  68.  LDA BYTMP ;RETRIEVE RESULT
  69.  RTS
  70.  
  71. ;   PACK : PACK ASCII DIGIT INTO NYBBLE
  72.  
  73. PACK CMP #$3A ;NUMERIC?
  74.  AND #$F ;CLEAR HI NYBBLE
  75.  BCC NOADD ;YES, SKIP ADD
  76.  ADC #8 ;ADD 8 + CARRY
  77. NOADD ASL BYTMP ;SHIFT BYTMP
  78.  ASL BYTMP
  79.  ASL BYTMP
  80.  ASL BYTMP
  81.  ORA BYTMP ;INSERT DIGIT
  82.  STA BYTMP ;SAVE
  83.  RTS
  84.  
  85. ;   INITIO : PREPARE THE VIA FOR INPUT
  86.  
  87. INITIO LDA PCR1 ;GET PCR
  88.  AND #$0F;CLEAR B PORT BITS
  89.  ORA #$A0 ;SET PULSE MODE
  90.  STA PCR1 ;PUT IN PCR
  91.  LDA #0 ;SET ALL BITS TO INPUT
  92.  STA DDRB1
  93.  LDA #$10 ;DISABLE INTERRUPT
  94.  STA IER1
  95.  LDA ORB1 ;GET FIRST CHARACTER
  96.  RTS
  97.  
  98. ;   GETCHR : INPUT 1 BYTE FROM USER PORT
  99.  
  100. GETCHR LDA #$10 ;MASK FOR CB1 INTERRUPT
  101. WAITC JSR RCHEK ;ALLOW INTERRUPTS
  102.  BIT IFR1 ;IS IT ON?
  103.  BEQ WAITC ;NO, WAIT FOR IT
  104.  LDA ORB1 ;RETRIEVE BYTE
  105.  STA ORB1 ;NOTIFY SENDER
  106.  RTS
  107.  
  108.  
  109.  
  110. ;   RCHEK : CHECK FOR INTERRUPT
  111.  
  112. RCHEK PHA ;SAVE ACCUM
  113.  JSR STOP ;RUN/STOP KEY DOWN?
  114.  BNE CKSPAC ;NO, SKIPPIT
  115.  LDA #0 ;CLEAR KEYBOARD STACK
  116.  STA KISTAK
  117.  ldx staksav ;restore stack
  118.  txs
  119.  clc
  120.  rts ;return to caller
  121.  
  122. CKSPAC LDA VICKEY ;GET CURRENT KEY
  123.  CMP #$20 ;SPACE BAR DOWN?
  124.  BEQ CKSPAC ;YES, PAUSE TILL IT LIFTS
  125.  LDA #0
  126.  STA KISTAK ;CLEAR KEYBOARD STACK
  127. RCOUT PLA
  128.  RTS
  129.  
  130.